try:
    import win32gui
    import win32con
    import win32print
except ImportError:
    import_win32_failed = True

from functools import lru_cache
from robot.api import logger


class Helper:
    @staticmethod
    @lru_cache(maxsize=128, typed=False)
    def get_dpi_proportion():
        """
        WIN32 API获取运行环境的DPI缩放率(高分辨率屏幕的电脑设置了缩放大小的时候,会导致截图变得不全)
        本方法是网上找到,设置缩放的两种方式都考虑进来了.在获取页面的元素的location属性的时候,都会存在这样的问题.

        :return:
        """
        if not import_win32_failed:
            return 1
        hDC = win32gui.GetDC(0)
        dpiA = win32print.GetDeviceCaps(hDC, win32con.DESKTOPHORZRES) / win32print.GetDeviceCaps(hDC, win32con.HORZRES)
        dpiB = win32print.GetDeviceCaps(hDC, win32con.LOGPIXELSX) / 0.96 / 100
        if dpiA == 1:
            dpi = dpiB
        elif dpiB == 1:
            dpi = dpiA
        elif dpiA == dpiB:
            dpi = dpiA
        logger.debug("DPI的缩放率{0}".format(dpi))
        return dpi
